﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Libreria.SIG.Modelo;

namespace Libreria.SIG.Negocio
{
    public class IngredienteNegocio
    {
        public Ingrediente consultarIngrediente(Int32 CodigoIngrediente, String cadenaDeConexion)
        {
            Ingrediente listaDeIngredientes = new Ingrediente(cadenaDeConexion);
            return listaDeIngredientes.consultarPorCodigo(CodigoIngrediente);
        }

        public List<Ingrediente> consultarIngredientesPorReceta(Int32 codigo, String cadenaDeConexion)
        {
            IngredientesDeReceta ingredientes = new IngredientesDeReceta(cadenaDeConexion);
            List<IngredientesDeReceta> ingredientesADevolver = new List<IngredientesDeReceta>();
            if (codigo > 0)
            {
                ingredientesADevolver = ingredientes.consultarIngredientes(codigo);
            }

            List<Ingrediente> lista = new List<Ingrediente>();
            foreach (IngredientesDeReceta item in ingredientesADevolver)
            {
                Ingrediente listaDeIngredientes = new Ingrediente(cadenaDeConexion);
                lista.Add(listaDeIngredientes.consultarPorCodigo(codigo));
            }

            return lista;
        }

        public List<Ingrediente> consultarIngredientes(String cadenaDeConexion)
        {
            Ingrediente listaDeIngredientes = new Ingrediente(cadenaDeConexion);
            return listaDeIngredientes.consultar();
        }

        public List<Ingrediente> consultarIngredientesPorTipo(Int32 TipoIngrediente, String cadenaDeConexion)
        {
            Ingrediente listaDeIngredientes = new Ingrediente(cadenaDeConexion);
            if (TipoIngrediente > 0)
            {
                return listaDeIngredientes.consultarPorTipo(TipoIngrediente);
            }
            else
            {
                return listaDeIngredientes.consultar();
            }
        }


        public void eliminarIngrediente(Int32 Codigo, String cadenaDeConexion, out String mensaje)
        {
            List<Inventario> Lista = new List<Inventario>();
            mensaje = "";
            Inventario inventarios = new Inventario(cadenaDeConexion);
            inventarios.Codigo = null;
            inventarios.CodIngrediente = Codigo;
            inventarios.Fecha = DateTime.MinValue;
            inventarios.Cantidad = null;
            inventarios.TipoMovimiento = null;
            inventarios.CostoUnitario = null;
            inventarios.CostoTotal = null;
            Lista = inventarios.consultar();

            if (Lista.Count() > 0)
            {
                mensaje = "No se puede borrar el registro";
            }
            else
            {

                Ingrediente listaDeIngredientes = new Ingrediente(cadenaDeConexion);
                listaDeIngredientes.Codigo = Codigo;
                listaDeIngredientes.Nombre = null;
                listaDeIngredientes.Valor = null;
                listaDeIngredientes.UnidadDeMedida = null;
                listaDeIngredientes.CantidadMinima = null;
                listaDeIngredientes.CantidadMaxima = null;
                listaDeIngredientes.eliminar();
            }
        }
        [Obsolete("Este método no debe ser utilizado, ya que se agrego el campo tipo de ingrediente ")]
        public void actualizarIngrediente(Int32 Codigo, String Nombre, Double Valor, String UnidadDeMedida, String cadenaDeConexion)
        {
            Ingrediente listaDeIngredientes = new Ingrediente(cadenaDeConexion);
            listaDeIngredientes.Codigo = Codigo;
            listaDeIngredientes.Nombre = Nombre;
            listaDeIngredientes.Valor = Valor;
            listaDeIngredientes.UnidadDeMedida = UnidadDeMedida;
            listaDeIngredientes.actualizar();
        }
        [Obsolete("Este método no debe ser utilizado, ya que se agregan los campos Cantidad Mínima y Cantidad Máxima")]
        public void actualizarIngrediente(String Nombre,Double Valor,String UnidadDeMedida,String cadenaDeConexion, Int32 TipoDeIngrediente, Int32 Codigo)
        {
            Ingrediente listaDeIngredientes = new Ingrediente(cadenaDeConexion);
            listaDeIngredientes.Codigo = Codigo;
            listaDeIngredientes.Nombre = Nombre;
            listaDeIngredientes.Valor = Valor;
            listaDeIngredientes.UnidadDeMedida = UnidadDeMedida;
            listaDeIngredientes.TipoDeIngrediente = TipoDeIngrediente;
            listaDeIngredientes.actualizar();
        }
        public void actualizarIngrediente(String Nombre, Double Valor, String UnidadDeMedida, String cadenaDeConexion, Int32 TipoDeIngrediente, Int32 CantidadMinima, Int32 CantidadMaxima, Int32 Codigo)
        {
            Ingrediente listaDeIngredientes = new Ingrediente(cadenaDeConexion);
            listaDeIngredientes.Codigo = Codigo;
            listaDeIngredientes.Nombre = Nombre;
            listaDeIngredientes.Valor = Valor;
            listaDeIngredientes.UnidadDeMedida = UnidadDeMedida;
            listaDeIngredientes.TipoDeIngrediente = TipoDeIngrediente;
            listaDeIngredientes.CantidadMinima = CantidadMinima;
            listaDeIngredientes.CantidadMaxima = CantidadMaxima;
            listaDeIngredientes.actualizar();
        }
        
        [Obsolete("Este método no debe ser utilizado, ya que se agrego el campo tipo de ingrediente")]
        public void crearIngrediente(String Nombre, Double Valor, String UnidadDeMedida, String cadenaDeConexion, Int32 Codigo)
        {
            Ingrediente listaDeIngredientes = new Ingrediente(cadenaDeConexion);
            listaDeIngredientes.Nombre = Nombre;
            listaDeIngredientes.Valor = Valor;
            listaDeIngredientes.UnidadDeMedida = UnidadDeMedida;
            listaDeIngredientes.crear();
        }

        [Obsolete("Este método no debe ser utilizado, ya que se agregan los campos Cantidad Mínima y Cantidad Máxima")]
        public void crearIngrediente(String Nombre, Double Valor, String UnidadDeMedida, String cadenaDeConexion, Int32 Codigo, Int32 TipoDeIngrediente)
        {
            Ingrediente listaDeIngredientes = new Ingrediente(cadenaDeConexion);
            listaDeIngredientes.Nombre = Nombre;
            listaDeIngredientes.Valor = Valor;
            listaDeIngredientes.UnidadDeMedida = UnidadDeMedida;
            listaDeIngredientes.TipoDeIngrediente = TipoDeIngrediente;
            listaDeIngredientes.crear();
        }

        public void crearIngrediente(String Nombre, Double Valor, String UnidadDeMedida, String cadenaDeConexion, Int32 Codigo, Int32 TipoDeIngrediente, Int32 CantidadMinima, Int32 CantidadMaxima)
        {
            Ingrediente listaDeIngredientes = new Ingrediente(cadenaDeConexion);
            listaDeIngredientes.Nombre = Nombre;
            listaDeIngredientes.Valor = Valor;
            listaDeIngredientes.UnidadDeMedida = UnidadDeMedida;
            listaDeIngredientes.TipoDeIngrediente = TipoDeIngrediente;
            listaDeIngredientes.CantidadMinima = CantidadMinima;
            listaDeIngredientes.CantidadMaxima = CantidadMaxima;
            listaDeIngredientes.crear();
        }
    }
}
